package com.example.nacosdemo.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.List;

/**
 * 服务消费者组件
 * 用于展示服务间的调用功能
 */
@Service
public class ServiceConsumer {

    @Autowired
    @LoadBalanced  // 开启负载均衡功能
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;

    /**
     * 调用其他服务的配置接口
     * @param serviceName 服务名称
     * @return 服务返回的配置信息
     */
    public String callServiceConfig(String serviceName) {
        try {
            // 使用服务名称进行调用，而不是硬编码的URL
            String url = "http://" + serviceName + "/config";
            return restTemplate.getForObject(url, String.class);
        } catch (Exception e) {
            return "Failed to call service: " + e.getMessage();
        }
    }

    /**
     * 获取注册到Nacos的服务列表
     * @return 服务列表信息
     */
    public List<String> getRegisteredServices() {
        return discoveryClient.getServices();
    }

    /**
     * 获取指定服务的所有实例
     * @param serviceName 服务名称
     * @return 服务实例列表
     */
    public List<ServiceInstance> getServiceInstances(String serviceName) {
        return discoveryClient.getInstances(serviceName);
    }

    /**
     * 调用自身服务的配置接口（演示用）
     * @return 配置信息
     */
    public String callSelfConfig() {
        return callServiceConfig("nacos-demo-service");
    }
}